// Day数据示例 - 24小时按2小时间隔，共12个数据点

// 数据类型定义
interface EnergyDataPoint {
  timestamp: string; // 时间戳
  label: string; // 显示标签
  solar: number; // 太阳能发电量 (kWh)
  battery: number; // 电池数据 (正值=充电，负值=放电)
  grid: number; // 电网数据 (正值=从电网取电，负值=向电网送电)
  home: number; // 家庭用电量 (kWh)
}

// Day时间维度的数据生成
export function generateDayData(dataType: "data" | "analysis" = "data") {
  const baseData: EnergyDataPoint[] = [
    {
      timestamp: "02:00",
      label: "02:00",
      solar: 0, // 夜晚无太阳能
      battery: -0.8, // 电池放电给家庭
      grid: 0.5, // 少量从电网取电
      home: 1.3 // 家庭夜间用电
    },
    {
      timestamp: "04:00",
      label: "04:00",
      solar: 0, // 夜晚无太阳能
      battery: -0.2, // 电池小量放电
      grid: 0.3, // 从电网取电
      home: 0.5 // 家庭低谷用电
    },
    {
      timestamp: "06:00",
      label: "06:00",
      solar: 0.5, // 太阳能开始发电
      battery: 0.2, // 开始充电
      grid: 0.8, // 早高峰需要电网补充
      home: 1.5 // 早晨用电高峰
    },
    {
      timestamp: "08:00",
      label: "08:00",
      solar: 1.2, // 太阳能增强
      battery: 0.3, // 继续充电
      grid: 0.4, // 减少电网依赖
      home: 1.9 // 早高峰持续
    },
    {
      timestamp: "10:00",
      label: "10:00",
      solar: 2.0, // 太阳能进一步增强
      battery: 0.8, // 大量充电
      grid: -0.2, // 开始向电网送电
      home: 1.4 // 用电量下降
    },
    {
      timestamp: "12:00",
      label: "12:00",
      solar: 3.0, // 太阳能峰值
      battery: 1.2, // 充电峰值
      grid: -0.8, // 大量向电网送电
      home: 1.0 // 白天用电较少
    },
    {
      timestamp: "14:00",
      label: "14:00",
      solar: 2.8, // 太阳能仍然很强
      battery: 1.0, // 继续充电
      grid: -0.6, // 向电网送电
      home: 1.2 // 下午用电增加
    },
    {
      timestamp: "16:00",
      label: "16:00",
      solar: 2.3, // 太阳能开始下降
      battery: 0.6, // 充电减少
      grid: -0.3, // 少量向电网送电
      home: 1.4 // 用电量增加
    },
    {
      timestamp: "18:00",
      label: "18:00",
      solar: 1.8, // 太阳能继续下降
      battery: 0.2, // 少量充电
      grid: 0.8, // 开始从电网取电
      home: 2.8 // 晚高峰开始
    },
    {
      timestamp: "20:00",
      label: "20:00",
      solar: 0.3, // 太阳能微弱
      battery: -1.2, // 电池开始放电
      grid: 1.5, // 大量从电网取电
      home: 2.6 // 晚高峰持续
    },
    {
      timestamp: "22:00",
      label: "22:00",
      solar: 0, // 太阳能停止
      battery: -1.0, // 电池放电
      grid: 1.8, // 电网供电
      home: 2.8 // 晚高峰峰值
    },
    {
      timestamp: "24:00",
      label: "00:00", // 显示为00:00更直观
      solar: 0, // 夜晚无太阳能
      battery: -0.6, // 电池放电
      grid: 0.8, // 电网供电
      home: 1.4 // 夜间用电下降
    }
  ];

  // 如果是analysis数据，在基础数据上增加一些变化
  const data =
    dataType === "analysis"
      ? baseData.map(point => ({
          ...point,
          solar: point.solar * 1.1, // 分析数据显示潜在发电量
          battery: point.battery * 0.9, // 优化后的电池使用
          grid: point.grid * 0.8, // 减少电网依赖
          home: point.home // 家庭用电保持不变
        }))
      : baseData;

  return {
    dataset: {
      timePoints: data.map(point => point.timestamp),
      energyData: data,
      chartType: "line" as const // day使用折线图
    },
    summary: calculateSummary(data)
  };
}

// 计算汇总数据
function calculateSummary(data: EnergyDataPoint[]) {
  const totals = data.reduce(
    (acc, point) => ({
      totalSolar: acc.totalSolar + Math.max(0, point.solar),
      totalBattery: acc.totalBattery + Math.abs(point.battery),
      totalGrid: acc.totalGrid + Math.abs(point.grid),
      totalHome: acc.totalHome + point.home
    }),
    { totalSolar: 0, totalBattery: 0, totalGrid: 0, totalHome: 0 }
  );

  return {
    totalSolar: Number(totals.totalSolar.toFixed(2)),
    totalBattery: Number(totals.totalBattery.toFixed(2)),
    totalGrid: Number(totals.totalGrid.toFixed(2)),
    totalHome: Number(totals.totalHome.toFixed(2))
  };
}

// 计算饼状图数据（Solar去向分布）
export function calculateSolarDestination(data: EnergyDataPoint[]) {
  const totals = data.reduce(
    (acc, point) => {
      // 只计算太阳能发电时的数据分配
      if (point.solar > 0) {
        const toBattery = Math.max(0, point.battery); // 正值表示充电
        const toGrid = Math.max(0, -point.grid); // 负值表示送电到电网
        const toHome = Math.min(point.solar, point.home); // 直接供家庭使用

        return {
          toBattery: acc.toBattery + toBattery,
          toGrid: acc.toGrid + toGrid,
          toHome: acc.toHome + toHome
        };
      }
      return acc;
    },
    { toBattery: 0, toGrid: 0, toHome: 0 }
  );

  const total = totals.toBattery + totals.toGrid + totals.toHome;

  return [
    {
      name: "To Battery",
      value: Number(totals.toBattery.toFixed(2)),
      percentage: Math.round((totals.toBattery / total) * 100) + "%",
      color: "#3498db"
    },
    {
      name: "To Grid",
      value: Number(totals.toGrid.toFixed(2)),
      percentage: Math.round((totals.toGrid / total) * 100) + "%",
      color: "#9ca3af"
    },
    {
      name: "To Home",
      value: Number(totals.toHome.toFixed(2)),
      percentage: Math.round((totals.toHome / total) * 100) + "%",
      color: "#10b981"
    }
  ];
}

// 导出示例数据
export const dayDataExample = {
  data: generateDayData("data"),
  analysis: generateDayData("analysis")
};

// 使用示例
console.log("Day Data Example:", dayDataExample.data);
console.log(
  "Solar Destination:",
  calculateSolarDestination(dayDataExample.data.dataset.energyData)
);
